﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Devart.Data.PostgreSql;
using System.Data;

namespace Sistema_financiero.Entidades
{
    public class Prestamo
    {
        public int ID { get; set; }
        public int ID_cliente { get; set; }
        public string Apellido_cliente { get; set; }
        public string Nombre_cliente { get; set; }
        public decimal Importe { get; set; }
        public decimal Instituto_informe { get; set; }
        public decimal Sellado { get; set; }
        public int Num_Cuotas { get; set; }
        public decimal TEM { get; set; }
        public decimal Comision_fija { get; set; }
        public decimal Comision_x_cuota { get; set; }
        public decimal Tasa_punitorio { get; set; }
        public DateTime Fecha_alta { get; set; }
        public TimeSpan Hora_alta { get; set; }
        public decimal Descuento { get; set; }
        public decimal Alicuota_iva { get; set; }
        public int ID_estado_prestamo { get; set; }
        public DateTime Fecha_act_punitorio { get; set; }
       
        public static int Obtener_id_prestamo()
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                Prestamo item = new Prestamo();
                conexion.Unicode = true;
                conexion.Open();
                string sql = "SELECT * FROM obtener_id_prestamo";
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();
                if (reader.IsDBNull(0) == false)
                {
                    item.ID = Convert.ToInt32(reader[0]);
                }

                conexion.Close();

                if (item != null)
                {
                    return item.ID + 1;
                }
                else
                {
                    return 1;
                }
            }
        }

        public static void Guardar_prestamo(int id_cliente, decimal importe, decimal instituto_informe, decimal sellado, int num_cuotas, decimal TEM, decimal comision_fija, decimal comision_x_cuota, decimal tasa_punitorio, decimal descuento, decimal alicuota_iva)
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Unicode = true;
                conexion.Open();

                string sql = String.Format("INSERT INTO \"Prestamo\" (\"id_cliente\", \"importe\", \"instituto_informe\", \"sellado\", \"num_cuotas\", \"TEM\", \"comision_fija\", \"comision_x_cuota\", \"tasa_punitorio\", \"descuento\", \"alicuota_iva\", \"id_estado_prestamo\") VALUES ({0}, '{1}', '{2}', {3}, {4}, {5}, '{6}', '{7}', {8}, '{9}', {10}, 1)", id_cliente, importe, instituto_informe, sellado, num_cuotas, TEM, comision_fija, comision_x_cuota, tasa_punitorio, descuento, alicuota_iva);
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();

                conexion.Close();


            }
        }

        public static List<Prestamo> Obtener_Todos_Prestamos_Pendientes()
        {
            List<Prestamo> lista = new List<Prestamo>();
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Unicode = true;
                conexion.Open();
                string sql = "SELECT * FROM obtener_todos_prestamos_pendientes";
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    lista.Add(Cargar_Prestamo(reader));
                }
                conexion.Close();
            }
            return lista;

        }
        private static Prestamo Cargar_Prestamo(IDataReader reader)
        {
            string hora_alta;
            DateTime hora_alta_;
            Prestamo item = new Prestamo();
            item.ID = Convert.ToInt32(reader[0]);
            item.ID_cliente = Convert.ToInt32(reader[1]);
            item.Apellido_cliente = Convert.ToString(reader[2]);
            item.Nombre_cliente = Convert.ToString(reader[3]);
            item.Importe = Convert.ToDecimal(reader[4]);
            item.Instituto_informe = Convert.ToDecimal(reader[5]);
            item.Sellado = Convert.ToDecimal(reader[6]);
            item.Num_Cuotas = Convert.ToInt32(reader[7]);
            item.TEM = Convert.ToDecimal(reader[8]);
            item.Comision_fija = Convert.ToDecimal(reader[9]);
            item.Comision_x_cuota = Convert.ToDecimal(reader[10]);
            item.Tasa_punitorio = Convert.ToDecimal(reader[11]);
            item.Fecha_alta = Convert.ToDateTime(reader[12]);
            hora_alta = Convert.ToString(reader[13]);
            if (hora_alta.Length > 8)
            {
                hora_alta = hora_alta.Remove(8);
            }
            hora_alta_ = Convert.ToDateTime(hora_alta);
            item.Hora_alta = hora_alta_.TimeOfDay;
            item.Descuento = Convert.ToDecimal(reader[14]);
            item.Alicuota_iva = Convert.ToDecimal(reader[15]);
            item.ID_estado_prestamo = Convert.ToInt32(reader[16]);
            item.Fecha_act_punitorio = Convert.ToDateTime(reader[17]);
            
            return item;

        }

         public static void Actualizar_estado_prestamo(int id_prestamo, int id_estado_prestamo)
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Unicode = true;
                conexion.Open();

                string sql = String.Format("UPDATE \"public\".\"Prestamo\" SET \"id_estado_prestamo\"= 2 WHERE \"id_prestamo\" = {1}", id_prestamo);
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();

                conexion.Close();


            }
        }

         public static void Actualizar_punitorios_prestamo(int id_prestamo, DateTime fecha_actualizacion)
         {
             using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
             {
                 conexion.Unicode = true;
                 conexion.Open();

                 string sql = String.Format("UPDATE \"public\".\"Prestamo\" SET \"fecha_act_punitorio\"= '{0}' WHERE \"id_prestamo\" = {1}", (fecha_actualizacion.ToString("d")), id_prestamo);
                 PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                 PgSqlDataReader reader = comando.ExecuteReader();
                 reader.Read();

                 conexion.Close();


             }
         }
    }
}
